package com.infocollect.project.grant.service.impl;

import java.util.List;

import com.infocollect.common.utils.CheckoutUtil;
import com.infocollect.framework.web.domain.AjaxResult;
import com.infocollect.project.grant.domain.*;
import com.infocollect.project.grant.mapper.GrExaminerMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.infocollect.project.grant.mapper.GrExaminerGrantMapper;
import com.infocollect.project.grant.service.IGrExaminerGrantService;

/**
 * 报名信息Service业务层处理
 *
 * @author infocollect
 * @date 2022-05-21
 */
@Service
public class GrExaminerGrantServiceImpl implements IGrExaminerGrantService
{
    @Autowired
    private GrExaminerGrantMapper grExaminerGrantMapper;
    @Autowired
    private GrExaminerMapper grExaminerMapper;

    /**
     * 查询报名信息
     *
     * @param id 报名信息ID
     * @return 报名信息
     */
    @Override
    public GrExaminerGrant selectGrExaminerGrantById(Long id)
    {
        return grExaminerGrantMapper.selectGrExaminerGrantById(id);
    }

    /**
     * 查询报名信息列表
     *
     * @param grExaminerGrant 报名信息
     * @return 报名信息
     */
    @Override
    public List<GrExaminerGrant> selectGrExaminerGrantList(GrExaminerGrant grExaminerGrant)
    {
        return grExaminerGrantMapper.selectGrExaminerGrantList(grExaminerGrant);
    }

    /**
     * 新增报名信息
     *
     * @param grExaminerGrant 报名信息
     * @return 结果
     */
    @Override
    public int insertGrExaminerGrant(GrExaminerGrant grExaminerGrant)
    {
        return grExaminerGrantMapper.insertGrExaminerGrant(grExaminerGrant);
    }

    /**
     * 修改报名信息
     *
     * @param grExaminerGrant 报名信息
     * @return 结果
     */
    @Override
    public int updateGrExaminerGrant(GrExaminerGrant grExaminerGrant)
    {
        return grExaminerGrantMapper.updateGrExaminerGrant(grExaminerGrant);
    }

    /**
     * 批量删除报名信息
     *
     * @param ids 需要删除的报名信息ID
     * @return 结果
     */
    @Override
    public int deleteGrExaminerGrantByIds(Long[] ids)
    {
        return grExaminerGrantMapper.deleteGrExaminerGrantByIds(ids);
    }

    /**
     * 删除报名信息信息
     *
     * @param id 报名信息ID
     * @return 结果
     */
    @Override
    public int deleteGrExaminerGrantById(Long id)
    {
        return grExaminerGrantMapper.deleteGrExaminerGrantById(id);
    }

    @Override
    public List<GrExaminerGrantDto> selectGrExaminerGrantDtoList(GrExaminerGrantDto examinerGrantDto) {
        return grExaminerGrantMapper.selectGrExaminerGrantDtoList(examinerGrantDto);
    }
    @Override
    public List<TeacherGrExaminerGrantDto> selectTeacherGrExaminerGrantDtoList(GrExaminerGrantDto examinerGrantDto) {
        return grExaminerGrantMapper.selectTeacherGrExaminerGrantDtoList(examinerGrantDto);
    }    @Override
    public List<PointGrExaminerGrantDto> selectPointGrExaminerGrantDtoList(GrExaminerGrantDto examinerGrantDto) {
        return grExaminerGrantMapper.selectPointGrExaminerGrantDtoList(examinerGrantDto);
    }
    /**
     * 根据人员报名信息，写入报名库和人员基本信息库
     * @author dongpj
     * @date 2022/5/22 下午7:00
     * @param grExaminerGrantDto
     * @return int
     */
    @Override
    public AjaxResult insertGrExaminerGrantDto(GrExaminerGrantDto grExaminerGrantDto) {
       return updateGrExaminerGrantDto(grExaminerGrantDto);
    }

    @Override
    public AjaxResult updateGrExaminerGrantDto(GrExaminerGrantDto grExaminerGrantDto) {
        String checkResult = checkExaminerGrantDtoInfo(grExaminerGrantDto);
        if(!"success".equals(checkResult)){
            return AjaxResult.error(checkResult);
        }
        GrExaminerGrant grExaminerGrant = new GrExaminerGrant();
        GrExaminer grExaminer= new GrExaminer();
        BeanUtils.copyProperties(grExaminerGrantDto,grExaminerGrant);
        BeanUtils.copyProperties(grExaminerGrantDto,grExaminer);
        grExaminer.setId(grExaminerGrant.getExaminerId());
        if(grExaminer.getId()==null){
            int result = grExaminerMapper.insertGrExaminer(grExaminer);
            grExaminerGrant.setExaminerId(grExaminer.getId());
        }else
        {
            grExaminerMapper.updateGrExaminer(grExaminer);
        }
        if(grExaminerGrant.getId()==null){

            grExaminerGrantMapper.insertGrExaminerGrant(grExaminerGrant);
        }else
        {
            grExaminerGrantMapper.updateGrExaminerGrant(grExaminerGrant);
        }
        return AjaxResult.success();
    }

    @Override
    public GrExaminerGrantDto selectGrExaminerGrantDtoById(Long id) {
        return grExaminerGrantMapper.selectGrExaminerGrantDtoById(id);
    }
    private String checkExaminerGrantDtoInfo(GrExaminerGrantDto grExaminerGrantDto){
        String name = grExaminerGrantDto.getName();
        String sex  = grExaminerGrantDto.getSex();
        String idCard= grExaminerGrantDto.getIdcard();
        if(StringUtils.isAnyEmpty(name,sex,idCard)){
            return "姓名、身份证、性别等基础信息不能为空";
        }
        if(grExaminerGrantDto.getCompanyId()==null || grExaminerGrantDto.getCompanyId()==0l){
            return "派出单位选择错误";
        }
        GrExaminer grExaminer = new GrExaminer();
        grExaminer.setIdcard(grExaminerGrantDto.getIdcard());
        List<GrExaminer> grExaminersList  = grExaminerMapper.selectGrExaminerList(grExaminer);
        if(grExaminersList.size()>0){
            grExaminer = grExaminersList.get(0);
        }
        if(grExaminer.getId()!=null && grExaminerGrantDto.getId()==null) {
            //如果是人员新增，要查一下对应的人员是不是已经报过名了
            GrExaminerGrant examinerGrant = new GrExaminerGrant();
            examinerGrant.setExaminerId(grExaminer.getId());
            examinerGrant.setGrantId(grExaminerGrantDto.getGrantId());
            List<GrExaminerGrant> examinerGrantList = grExaminerGrantMapper.selectGrExaminerGrantList(examinerGrant);
            if(examinerGrantList.size()>0){
                grExaminerGrantDto.setId(examinerGrantList.get(0).getId());
//                return "该人员已经存在！";
            }
        }

        if(grExaminer.getId()!=null && grExaminerGrantDto.getExaminerId()!=null && !grExaminerGrantDto.getExaminerId().equals(grExaminer.getId())){
            return "请不要使用他人的身份证号";
        }
        grExaminerGrantDto.setExaminerId(grExaminer.getId());
        GrExaminer grExaminer1 = grExaminerMapper.selectGrExaminerById(grExaminer.getId());
        if (grExaminer1!=null) {
            //新老证件不相等并且新证件在其它记录里面已经存在的，就不允许更新
            if (!grExaminerGrantDto.getIdcard().equals(grExaminer1.getIdcard())) {
                if(grExaminersList.size()>0){
                    return "请不要使用其他人的身份证";
                }
            }
        }else{
            if(grExaminersList.size()>0){
                return "请不要使用其他人的身份证";
            }
        }
        //校验身份证位数/手机号码/单位名称是否正确
        boolean idNumber = CheckoutUtil.isIDNumber(grExaminerGrantDto.getIdcard());
        if(!idNumber)
        {
            //H打头的是香港回乡证
            if(grExaminer.getIdcard().indexOf("H") == 0)
            {
                idNumber = true;
            }
        }
        if(!idNumber)
        {
            return "身份证号输入错误";
        }
        return "success";
    }
}
